'use strict';
const EventHandler = require('@opentapd/tplugin-core');
const { Base64 } = require('js-base64');


/**
 * main_handler() 框架执行的入口方法
 * @param {string|Object} event - 请求包装后的数据
 * @param {Object} event.headers - 请求头
 * @param {Object} event.payload - 请求体
 * @param {Object} context - 执行的上下文
 * @param {string} basePath - 执行的根目录
 * @param {boolean} reload - 是否热更新代码
 * @returns {string} 请求响应数据
 */
exports.main_handler = async (event, context, basePath, reload) => {
  basePath = typeof basePath === 'string' ? basePath : '';
  reload = typeof reload === 'boolean' ? reload : false;
  // reload true 时，需要使用base64解码请求数据
  if (reload) event = JSON.parse(Base64.decode(event));

  const newLog = function (...args) {
    const now = new Date().toLocaleString();
    console.info(now); // 打印当前时间
    console.info(...args); // 使用apply调用原始console.log函数，并将console作为this上下文
  };

  newLog.oLog = console.log; // 保存原始的console.log引用，以备后续恢复使用

  // 重写console.log函数
  console.log = newLog;

  const eventHandler = new EventHandler(event);
  // 分发&处理请求
  // console.log('event', event);
  // console.log('data.data', eventHandler.data.data);
  const response = await eventHandler.exec(basePath, reload);
  return response;
};
